home *** CD-ROM | disk | FTP | other *** search
Modula Implementation | 1994-09-22 | 5.8 KB | 211 lines |
- IMPLEMENTATION MODULE DateTime;
-
- (*
- * This module reads the ATARI ST system time and formats it according to
- * the type specified by the user.
- *
- * Copyright 1987, Barry Locklear
- *
- * The author grants the privilege of distributing this
- * software free, or for a nominal charge to cover the media
- * costs, or for connect time.
- *
- * Distribution for commercial gain is prohibited.
- *
- * The only exception is that Jefferson Software may
- * distribute it with their Modula-2 package if they so
- * desire.
- *
- * If improvements are made, please send them to me.
- * Compuserve: 76327,2102
- * Genie: BLOCKLEAR
- * The Jefferson Software BBS (602)276-6102
- *
- * This MODULE is written in Jefferson Software Modula-2
- *)
-
-
- FROM SYSTEM IMPORT SHIFT;
- FROM GEMDOSTimeDate IMPORT Tgetdate, Tgettime;
- FROM String IMPORT Concat, Insert, GetTerminator;
-
- TYPE
- Months = (January, February, March, April, May, June,
- July, August, September, October, November, December );
-
- VAR
- MonthNames : ARRAY [January..December] OF ARRAY [0..2] OF CHAR;
- CapMonthNames : ARRAY [January..December] OF ARRAY [0..2] OF CHAR;
-
- (* --------------------------------------------------------------------*)
- PROCEDURE InitMonthNames();
- BEGIN
- MonthNames[ January ] := "Jan"; CapMonthNames[ January ] := "JAN";
- MonthNames[ February ] := "Feb"; CapMonthNames[ February ] := "FEB";
- MonthNames[ March ] := "Mar"; CapMonthNames[ March ] := "MAR";
- MonthNames[ April ] := "Apr"; CapMonthNames[ April ] := "APR";
- MonthNames[ May ] := "May"; CapMonthNames[ May ] := "MAY";
- MonthNames[ June ] := "Jun"; CapMonthNames[ June ] := "JUN";
- MonthNames[ July ] := "Jul"; CapMonthNames[ July ] := "JUL";
- MonthNames[ August ] := "Aug"; CapMonthNames[ August ] := "AUG";
- MonthNames[ September ] := "Sep"; CapMonthNames[ September ] := "SEP";
- MonthNames[ October ] := "Oct"; CapMonthNames[ October ] := "OCT";
- MonthNames[ November ] := "Nov"; CapMonthNames[ November ] := "NOV";
- MonthNames[ December ] := "Dec"; CapMonthNames[ December ] := "DEC";
-
- END InitMonthNames;
-
- (*----------------------------------------------------------------------*)
-
- PROCEDURE CardToString( InCard: CARDINAL; VAR CardString: ARRAY OF CHAR );
- VAR
- tempString: ARRAY [0..4] OF CHAR;
- i,
- j : INTEGER;
-
- BEGIN
- i := 0;
-
- LOOP
- tempString[i] := CHR( ( InCard MOD 10 ) + VAL( CARDINAL, ORD('0') ) );
- INC( i );
- InCard := InCard DIV 10;
- IF InCard = 0 THEN
- EXIT;
- END;
- END; (* LOOP *)
-
- (* now copy string in correct order *)
- j := 0;
-
- REPEAT
- IF j > HIGH( CardString ) THEN RETURN; END; (* IF *)
- DEC( i ); (* i started out to be 1 too large *)
- CardString[j] := tempString[i];
- INC( j );
- UNTIL i = 0;
-
- IF j <= HIGH( CardString) THEN
- CardString[j] := GetTerminator();
- END;
-
- END CardToString;
-
- (*----------------------------------------------------------------------*)
-
- (*
- * Get the date and format it according to the caller's whims
- *)
-
- PROCEDURE GetDate( VAR DateStr : ARRAY OF CHAR; Format : DateFormat );
-
- CONST
- YearOffsetLong = 1980;
- YearOffset = 80;
-
- VAR
- month : Months;
-
- day,
- year,
- date : CARDINAL;
-
- yearString : ARRAY [0..3] OF CHAR;
- dayString : ARRAY [0..1] OF CHAR;
-
- BEGIN
- date := Tgetdate();
-
- (*
- * Extract the date from the cardinal returned from Tgetdate
- *)
- month := VAL( Months, SHIFT( SHIFT( date, 7 ), -12 ) - 1 );
- day := SHIFT( SHIFT( date, 11 ), -11 );
-
- IF (Format = MoDayYear) OR (Format = CapMoDayYear)
- THEN
- year := SHIFT( date, -9 ) + YearOffsetLong;
- ELSE
- year := SHIFT( date, -9 ) + YearOffset;
- END; (* IF *)
-
- CardToString( year, yearString );
- CardToString( day, dayString );
-
- CASE Format OF
- MoDayYear :
- Concat( MonthNames[month], " ", DateStr );
- Concat( DateStr, dayString, DateStr );
- Concat( DateStr, ", ", DateStr );
- Concat( DateStr, yearString, DateStr );
- | CapMoDayYear :
- Concat( CapMonthNames[month], " ", DateStr );
- Concat( DateStr, dayString, DateStr );
- Concat( DateStr, ", ", DateStr );
- Concat( DateStr, yearString, DateStr );
- | DayMoYear :
- Concat( dayString, MonthNames[month], DateStr );
- Concat( DateStr, yearString, DateStr );
- | CapDayMoYear :
- Concat( dayString, CapMonthNames[month], DateStr );
- Concat( DateStr, yearString, DateStr );
- | YearMoDay :
- Concat( yearString, MonthNames[month], DateStr );
- Concat( DateStr, dayString, DateStr );
- | CapYearMoDay :
- Concat( yearString, CapMonthNames[month], DateStr );
- Concat( DateStr, dayString, DateStr );
- END; (* CASE *)
-
- END GetDate;
-
- (*-----------------------------------------------------------------------*)
-
- (*
- * Get the time and format it according to the caller's whims
- *)
-
- PROCEDURE GetTime( VAR TimeStr: ARRAY OF CHAR; Format : TimeFormat );
-
- VAR
- hour,
- minute,
- time : CARDINAL;
-
- hourString : ARRAY [0..1] OF CHAR;
- minuteString : ARRAY [0..4] OF CHAR;
-
- BEGIN
- time := Tgettime();
- (*
- * Extract time from cardinal returned by Tgettime
- *)
- hour := SHIFT( time, -11 );
- minute := SHIFT( SHIFT( time, 5 ), -10 );
-
- CardToString( minute, minuteString );
- IF minute < 10 THEN Insert( "0", minuteString, 0 ); END; (* IF *)
-
- IF Format = Hour12 THEN
- IF (hour <= 11)
- THEN Concat( minuteString, "AM", minuteString );
- ELSE Concat( minuteString, "PM", minuteString );
- END; (* IF *)
-
- IF hour > 12 THEN hour := hour - 12; END; (* IF *)
- IF hour = 0 THEN hour := 12; END; (* IF *)
- END; (* IF *)
-
- CardToString( hour, hourString );
-
- IF hour < 10 THEN Insert( "0", hourString, 0 ); END; (* IF *)
-
- Concat( hourString, ":", TimeStr );
- Concat( TimeStr, minuteString, TimeStr );
-
- END GetTime;
-
- BEGIN
- InitMonthNames();
- END DateTime.
-